<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-3909437111992360080</id><updated>2009-03-18T20:37:41.763+03:00</updated><title type='text'>Just practicing</title><subtitle type='html'></subtitle><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default'/><link rel='alternate' type='text/html' href='http://anton_nazarov.fatal.ru/blog/blogger.html'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://anton_nazarov.fatal.ru/blog/feed/atom.xml'/><author><name>Anton Nazarov</name><uri>http://www.blogger.com/profile/15605075612768561014</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>21</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3909437111992360080.post-440488076504882230</id><published>2009-03-18T11:25:00.002+03:00</published><updated>2009-03-18T12:06:31.967+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='collation'/><category scheme='http://www.blogger.com/atom/ns#' term='django'/><category scheme='http://www.blogger.com/atom/ns#' term='sqlite'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='russian'/><category scheme='http://www.blogger.com/atom/ns#' term='icu'/><category scheme='http://www.blogger.com/atom/ns#' term='case-insensitive'/><title type='text'>Django + SQLite + Collations</title><content type='html'>There is rather well-known "SQLite case-insensitive problem", which is that SQLite can do case-insensitive SELECT only for ASCII character set. This problem was discussed at &lt;a href="http://groups.google.com/group/django-users/browse_thread/thread/6489570cf206358e/20a20d59cd4c3478"&gt;Django users list&lt;/a&gt;, posted as Djungo &lt;a href="http://code.djangoproject.com/ticket/9905"&gt;feature request&lt;/a&gt; and documented in the documentation: &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  SQLite doesn't support case-insensitive matching for non-ASCII strings. Some &lt;br /&gt;  possible workarounds for this are `documented at sqlite.org`_, but they are &lt;br /&gt;  not utilised by the default SQLite backend in Django. Therefore, if you are &lt;br /&gt;  using the ``iexact`` lookup type in your queryset filters, be aware that it &lt;br /&gt;  will not work as expected for non-ASCII strings.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I also met this problem and I had to find a solution since I need to deploy one small application (ebooks catalogue) at the department machine where I didn't have root account and was unable to install another database engine.&lt;br /&gt;&lt;br /&gt;The solution is not really hard. &lt;br /&gt;&lt;br /&gt;Support of collations for SQLite is provided by loadable extension through ICU library, which is installed on almost every Linux box. This is documented &lt;a href="http://sqlite.org/faq.html#q18"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;So first step is to get ICU extension for SQLite &lt;a href="http://www.sqlite.org/cvstrac/getfile?f=sqlite/ext/icu/icu.c&amp;v="&gt;here&lt;/a&gt; and compile it with&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  gcc -shared icu.c icu-config --ldflags -o icu.so&lt;br /&gt;&lt;/pre&gt; &lt;br /&gt;You need to have development files of libicu installed, for Debian/Ubuntu do &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  sudo apt-get install libicu-dev&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now it is possible to test the extension (and also check if sqlite3 in your system is built with extension support):&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  nazarov@heps1:~/lib&gt; sqlite3&lt;br /&gt;  SQLite version 3.6.11&lt;br /&gt;  Enter ".help" for instructions&lt;br /&gt;  Enter SQL statements terminated with a ";"&lt;br /&gt;  sqlite&gt; .load ./icu.so&lt;br /&gt;  sqlite&gt;  SELECT icu_load_collation('ru_RU', 'RUSSIAN');&lt;br /&gt;  &lt;br /&gt;  sqlite&gt; SELECT * FROM core_author WHERE name LIKE 'вайн%';&lt;br /&gt;  1420|Вайнер А.Л.&lt;br /&gt;  4557|Вайнберг М.М.&lt;br /&gt;  4558|Вайнберг М.М.&lt;br /&gt;  6374|Вайнберг Б.&lt;br /&gt;  7326|Вайнштейн Б.К.&lt;br /&gt;  7327|Вайнштейн Л.А.&lt;br /&gt;  7458|Вайнштейн С.И.&lt;br /&gt;  8636|Вайнберг С.&lt;br /&gt;  8958|Вайнштейн С.И.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;If your SQLite is built without extension support, get appropriate version at &lt;a href="http://sqlite.org"&gt;SQLite homepage&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Then we need extension support in &lt;a href="http://oss.itsystementwicklung.de/trac/pysqlite/wiki"&gt;pysqlite&lt;/a&gt;. Since version 2.5.2 pysqlite can load SQLite extensions, but this feature is disabled by default. So download pysqlite, extract, remove the line&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  define=SQLITE_OMIT_LOAD_EXTENSION&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;from the file setup.cfg and build it:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  wget http://oss.itsystementwicklung.de/download/pysqlite/2.5/2.5.5/pysqlite-2.5.5.tar.gz&lt;br /&gt;  tar xzf pysqlite-2.5.5.tar.gz&lt;br /&gt;  cd pysqlite-2.5.5&lt;br /&gt;  vi setup.cfg&lt;br /&gt;  python setup.py build&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now you can check, that pysqlite can load icu and make case insensitive selects:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  export PYTHONPATH=`pwd`:$PYTHONPATH;export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH;python&lt;br /&gt;  Python 2.5 (r25:51908, Nov 27 2006, 19:14:46) &lt;br /&gt;  [GCC 4.1.2 20061115 (prerelease) (SUSE Linux)] on linux2&lt;br /&gt;  Type "help", "copyright", "credits" or "license" for more information.&lt;br /&gt;  &gt;&gt;&gt; from pysqlite2 import dbapi2 as sqlite3&lt;br /&gt;  &gt;&gt;&gt; con = sqlite3.connect("lib.db")&lt;br /&gt;  &gt;&gt;&gt; con.enable_load_extension(True)&lt;br /&gt;  &gt;&gt;&gt; con.load_extension("./icu.so")&lt;br /&gt;  &gt;&gt;&gt; con.execute("SELECT icu_load_collation('ru_RU', 'RUSSIAN');")&lt;br /&gt;  &amp;lt;pysqlite2.dbapi2.Cursor object at 0xb7cab660&gt;&lt;br /&gt;  &gt;&gt;&gt; con.execute("SELECT * FROM core_author WHERE name LIKE 'вайн%';")&lt;br /&gt;  &amp;lt;pysqlite2.dbapi2.Cursor object at 0xb7cab820&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Also I had to build static version of pysqlite which included SQLite, because SQLite on target system didn't support loadable extenstion. I did it with &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  python setup.py build_static&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;So now we need to tell Django to use collations. Correct way would be to write custom db backend, but it is far simplier just to add 3 following lines to the file django/db/backends/sqlite3/base.py:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;*** 143,148 ****&lt;br /&gt;--- 143,153 ----&lt;br /&gt;              }&lt;br /&gt;              kwargs.update(self.options)&lt;br /&gt;              self.connection = Database.connect(**kwargs)&lt;br /&gt;+             # Add Russian collation&lt;br /&gt;+             self.connection.enable_load_extension(True)&lt;br /&gt;+             self.connection.load_extension("/home/nazarov/lib/icu.so")&lt;br /&gt;+             self.connection.execute("SELECT icu_load_collation('ru_RU', 'RUSSIAN');")&lt;br /&gt;+ &lt;br /&gt;              # Register extract, date_trunc, and regexp functions.&lt;br /&gt;              self.connection.create_function("django_extract", 2, _sqlite_extract)&lt;br /&gt;              self.connection.create_function("django_date_trunc", 2, _sqlite_date_trunc)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now Django applications can do case-insensitive SELECTs (iexact, icontains etc) for Russian language.&lt;br /&gt;&lt;br /&gt;On my target machine I had to start Django development server with &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  export PYTHONPATH=`pwd`/Django-1.0.2-final/:`pwd`:$PYTHONPATH&lt;br /&gt;  export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH;&lt;br /&gt;  python library/manage.py runserver 10.0.0.15:8000&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;since I could not do system-wide install.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/3909437111992360080-440488076504882230?l=anton_nazarov.fatal.ru%2Fblog%2Fblogger.html'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/440488076504882230/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3909437111992360080&amp;postID=440488076504882230' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/440488076504882230'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/440488076504882230'/><link rel='alternate' type='text/html' href='http://anton_nazarov.fatal.ru/blog/2009/03/django-sqlite-collations.html' title='Django + SQLite + Collations'/><author><name>Anton Nazarov</name><uri>http://www.blogger.com/profile/15605075612768561014</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3909437111992360080.post-19968209215662126</id><published>2008-06-30T09:27:00.003+04:00</published><updated>2008-06-30T09:46:48.309+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='accelerators'/><category scheme='http://www.blogger.com/atom/ns#' term='science'/><category scheme='http://www.blogger.com/atom/ns#' term='physics'/><title type='text'>Popular history of particle accelerators experiments (part 1)</title><content type='html'>&lt;!--l. 21--&gt;&lt;p class="noindent" &gt;&lt;a  href="http://en.wikipedia.org/wiki/LHC" &gt;Large Hadron Collider&lt;/a&gt; (LHC) will start operation this year, so there are a lot of fuss in press and blogs. Some people try to obtain public attention with legal claims against CERN. Nonetheless, general public is not aware of particle physics and accelerator experiments, and conceive LHC as final ultimate device for discovery of theory of everything or even as a doomsday machine. I want to review the history of particle physics experiments to show that LHC is next step in research. It shouldn&amp;#8217;t be viewed as final or outstanding. &lt;!--l. 24--&gt;&lt;p class="indent" &gt;   My posts are based on lectures of I.N. Meshkov at sixth winter school &lt;a  href="http://theor.jinr.ru/~diastp/winter08/" &gt;"Introduction to theory of fundamental interactions"&lt;/a&gt; in Dubna. &lt;!--l. 26--&gt;&lt;p class="indent" &gt;   Ancient Greeks proposed two opposite ideas of structure of matter. One conception was that everything consists of several kinds of indivisible particles while the other told that everything could be divided into infinitely small parts. &lt;!--l. 28--&gt;&lt;p class="indent" &gt;   So the target of particle physics is to find out which point of view is closer to real world and to study properties of particles for better understanding of our world which consists of particles. &lt;!--l. 30--&gt;&lt;p class="indent" &gt;   Today we know that there are several kinds of elementary particles, which are united into so called &lt;a  href="http://en.wikipedia.org/wiki/Standard_model" &gt;&amp;#8220;Standard model&amp;#8221;&lt;/a&gt;. &lt;hr class="figure"&gt;&lt;div class="figure"  &gt;&lt;table class="figure"&gt;&lt;tr class="figure"&gt;&lt;td class="figure"  &gt;                                                                                                                                                        &lt;a   id="x1-10011"&gt;&lt;/a&gt;                                                                                                                                                        &lt;!--l. 32--&gt;&lt;p class="noindent" &gt; &lt;img  src="http://anton_nazarov.fatal.ru/static/images/blog/accelerators1/standard_model.png" alt="PIC"  width="200px" &gt; &lt;br /&gt; &lt;table class="caption"  &gt;&lt;tr style="vertical-align:baseline;" class="caption"&gt;&lt;td class="id"&gt;&amp;#x0420;&amp;#x0438;&amp;#x0441;.&amp;#x00A0;1: &lt;/td&gt;&lt;td   class="content"&gt;Standard model of elementary particles&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;!--tex4ht:label?: x1-10011 --&gt;                                                                                                                                                        &lt;!--l. 36--&gt;&lt;p class="indent" &gt;   &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;hr class="endfigure"&gt; &lt;!--l. 39--&gt;&lt;p class="indent" &gt;   String theory tell us that all these particles are modes of oscillation of more elementary objects, which are called "strings but now it is just a hypothesis which could not be checked with experiment. &lt;!--l. 41--&gt;&lt;p class="indent" &gt;   History of particle physics started at 1895 from discovery of photons as X-rays particles by Konrad Rentgen and discovery of electron by Joseph John Thomson (1897). First experiments didn&amp;#8217;t use particle accelerators. &lt;hr class="figure"&gt;&lt;div class="figure"  &gt;&lt;table class="figure"&gt;&lt;tr class="figure"&gt;&lt;td class="figure"  &gt;                                                                                                                                                        &lt;a   id="x1-10022"&gt;&lt;/a&gt;&lt;a   id="x1-10033"&gt;&lt;/a&gt;                                                                                                                                                        &lt;!--l. 42--&gt;&lt;p class="noindent" &gt;&amp;#x00A0; &lt;table class="multicols" id="multicols-1"&gt;&lt;tr&gt;&lt;td class="multicol-1"&gt; &lt;!--l. 44--&gt;&lt;p class="noindent" &gt;                                                                      &lt;img  src="http://anton_nazarov.fatal.ru/static/images/blog/accelerators1/rentgen.png" alt="PIC"  width="150px" &gt; &lt;br /&gt; &lt;table class="caption"  &gt;&lt;tr style="vertical-align:baseline;" class="caption"&gt;&lt;td class="id"&gt;&amp;#x0420;&amp;#x0438;&amp;#x0441;.&amp;#x00A0;2: &lt;/td&gt;&lt;td   class="content"&gt;Konrad Rentgen&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;!--tex4ht:label?: x1-10022 --&gt; &lt;!--l. 48--&gt;&lt;p class="noindent" &gt;                                                                      &lt;img  src="http://anton_nazarov.fatal.ru/static/images/blog/accelerators1/thomson.png" alt="PIC"   &gt; &lt;br /&gt; &lt;table class="caption"  &gt;&lt;tr style="vertical-align:baseline;" class="caption"&gt;&lt;td class="id"&gt;&amp;#x0420;&amp;#x0438;&amp;#x0441;.&amp;#x00A0;3: &lt;/td&gt;&lt;td   class="content"&gt;Joseph John Thomson&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;!--tex4ht:label?: x1-10033 --&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;                                                                                                                                                        &lt;!--l. 53--&gt;&lt;p class="indent" &gt;   &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;hr class="endfigure"&gt; &lt;!--l. 54--&gt;&lt;p class="indent" &gt;   First electrostatic accelerators were created in 1931-1932 by R. Van-der-Graaf and J.D. Cockroft with E.T.S. Walton, and allowed the discovery of neutron by James Chadwick. He used reaction    &lt;center class="math-display" &gt; &lt;img  src="http://anton_nazarov.fatal.ru/static/images/blog/accelerators1/accelerators10x.png" alt="p +7 Li &amp;#x2192;  &amp;#x03B1; + &amp;#x03B1;  " class="math-display" &gt;&lt;/center&gt; These early accelerators were not very powerful and sophisticated, so many discoveries in particle physics were made from observations of cosmic rays, which started at 1912 by, Victor Hess. He has found in experiment with 3 electrometers carried out in a free balloon flight up to an altitude of 5300 meters that the ionization rate increased approximately fourfold over the rate at ground level. He concluded :"The results of my observation are best explained by the assumption that a radiation of very great penetrating power enters our atmosphere from above". &lt;!--l. 59--&gt;&lt;p class="indent" &gt;   In 1932, Carl D. Anderson discovered positron by passing cosmic rays through a "Wilson chamber"with lead plate surrounded by a magnet to distinguish the particles charge. It was the beginning of the competition of accelerators with cosmic rays. &lt;!--l. 61--&gt;&lt;p class="indent" &gt;   Cosmic rays consist of particles produced in outer space in thermonuclear reactions in stars and during supernova bursts. Some of these particles have energy which greatly exceeds energy of LHC and all the accelerators possible in near future. So it is one of the reasons why LHC wouldn&amp;#8217;t destroy the Earth. But in spite of such enormous energy cosmic rays are rather inconvenient for particle physics experiments, because the density of such high-energy particles is very low. &lt;!--l. 63--&gt;&lt;p class="indent" &gt;   In 1929-1932 Ernest O. Lawrence invented the resonance acceleration method which allowed construction of first cyclotron and first resonance linear accelerator, but next advance in particle physics was achieved in cosmic rays observations at 1936. Carl D. Anderson discovered of "mesotron which was supposed to be hypothetical Yukawa particle carrying interaction between protons and neutrons in nuclei. Later it was found out that mesotron was not Yukawa particle, but other electron-alike fundamental particle, so it was renamed to muon.                                                                                                                                                        &lt;!--l. 65--&gt;&lt;p class="indent" &gt;   Break-through in accelerator technics was made by Vladimir I. Veksler (USSR, 1944) and Edwin McMillan (USA, 1945) with the discovery of the &amp;#8220;Phase stability principle&amp;#8221; and construction of the first electron synchrotron (Veksler) and the first synchrocyclotron (E.McMillan). &lt;!--l. 67--&gt;&lt;p class="indent" &gt;   &lt;hr class="figure"&gt;&lt;div class="figure"  &gt;&lt;table class="figure"&gt;&lt;tr class="figure"&gt;&lt;td class="figure"  &gt;                                                                                                                                                        &lt;a   id="x1-10044"&gt;&lt;/a&gt;&lt;a   id="x1-10055"&gt;&lt;/a&gt;&lt;a   id="x1-10066"&gt;&lt;/a&gt;                                                                                                                                                        &lt;table class="multicols" id="multicols-2"&gt;&lt;tr&gt;&lt;td class="multicol-1"&gt; &lt;!--l. 69--&gt;&lt;p class="noindent" &gt;                                                                      &lt;img  src="http://anton_nazarov.fatal.ru/static/images/blog/accelerators1/veksler.png" alt="PIC"   &gt; &lt;br /&gt; &lt;table class="caption"  &gt;&lt;tr style="vertical-align:baseline;" class="caption"&gt;&lt;td class="id"&gt;&amp;#x0420;&amp;#x0438;&amp;#x0441;.&amp;#x00A0;4: &lt;/td&gt;&lt;td   class="content"&gt;Vladimir I. Veksler&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;!--tex4ht:label?: x1-10044 --&gt; &lt;!--l. 74--&gt;&lt;p class="noindent" &gt;                                                                      &lt;img  src="http://anton_nazarov.fatal.ru/static/images/blog/accelerators1/mcmillan.png" alt="PIC"   &gt; &lt;br /&gt; &lt;table class="caption"  &gt;&lt;tr style="vertical-align:baseline;" class="caption"&gt;&lt;td class="id"&gt;&amp;#x0420;&amp;#x0438;&amp;#x0441;.&amp;#x00A0;5: &lt;/td&gt;&lt;td   class="content"&gt;Edwin McMillan&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;!--tex4ht:label?: x1-10055 --&gt; &lt;!--l. 79--&gt;&lt;p class="noindent" &gt;                                                                      &lt;img  src="http://anton_nazarov.fatal.ru/static/images/blog/accelerators1/veksler_and_mcmillan.png" alt="PIC"   &gt; &lt;br /&gt; &lt;table class="caption"  &gt;&lt;tr style="vertical-align:baseline;" class="caption"&gt;&lt;td class="id"&gt;&amp;#x0420;&amp;#x0438;&amp;#x0441;.&amp;#x00A0;6: &lt;/td&gt;&lt;td   class="content"&gt;Vladimir I. Veksler and Edwin McMillan at JINR (Dubna) 1958&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;!--tex4ht:label?: x1-10066 --&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;                                                                                                                                                        &lt;!--l. 84--&gt;&lt;p class="indent" &gt;   &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;hr class="endfigure"&gt; &lt;!--l. 86--&gt;&lt;p class="indent" &gt;   Cosmic rays observations also made big progress, in 1947 pions, &lt;img  src="http://anton_nazarov.fatal.ru/static/images/blog/accelerators1/accelerators11x.png" alt="&amp;#x039B;0   "  class="math" &gt;-hyperon and kaons were discovered. But cosmic rays observations were not very accurate, so there were some false &amp;#8220;discoveries&amp;#8221;, such as &amp;#8220;Varitrons&amp;#8221;. So first synchrocyclotrons allowed to improve results of cosmic rays observation. &lt;!--l. 88--&gt;&lt;p class="indent" &gt;   In 1947 Berkeley Synchrocyclotron was put into operation. It had 184 inches (4.7 m) in diameter, and energy of accelerated &lt;img  src="http://anton_nazarov.fatal.ru/static/images/blog/accelerators1/accelerators12x.png" alt="&amp;#x03B1;  "  class="math" &gt;-particles of 400 MeV. On this accelerator Lattes and E. Gardner achieved first artificial production of pions in reaction    &lt;center class="math-display" &gt; &lt;img  src="http://anton_nazarov.fatal.ru/static/images/blog/accelerators1/accelerators13x.png" alt="&amp;#x03B1; +12 C &amp;#x2192;  &amp;#x03C0;+ + X  " class="math-display" &gt;&lt;/center&gt; Similar synchrocyclotron &amp;#8220;Phasotron&amp;#8221; was built in Dubna (USSR) at 1949. It is still in operation now and is used for cancer therapy, muon-catalysis, pion and muon physics experiments and nuclear physics experiments. &lt;hr class="figure"&gt;&lt;div class="figure"  &gt;&lt;table class="figure"&gt;&lt;tr class="figure"&gt;&lt;td class="figure"  &gt;                                                                                                                                                        &lt;a   id="x1-10077"&gt;&lt;/a&gt;                                                                                                                                                        &lt;!--l. 92--&gt;&lt;p class="noindent" &gt; &lt;img  src="http://anton_nazarov.fatal.ru/static/images/blog/accelerators1/phasotron.png" alt="PIC"  width="300px" &gt; &lt;br /&gt; &lt;table class="caption"  &gt;&lt;tr style="vertical-align:baseline;" class="caption"&gt;&lt;td class="id"&gt;&amp;#x0420;&amp;#x0438;&amp;#x0441;.&amp;#x00A0;7: &lt;/td&gt;&lt;td   class="content"&gt;Phasotron, JINR (Dubna)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;!--tex4ht:label?: x1-10077 --&gt;                                                                                                                                                        &lt;!--l. 96--&gt;&lt;p class="indent" &gt;   &lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;hr class="endfigure"&gt; &lt;!--l. 98--&gt;&lt;p class="indent" &gt;   Since the end of 1940-th accelerators are the main tools of particle physics and majority of experimental results of fundamental character has been obtained both in particle, and nuclear physics at accelerators.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/3909437111992360080-19968209215662126?l=anton_nazarov.fatal.ru%2Fblog%2Fblogger.html'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/19968209215662126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3909437111992360080&amp;postID=19968209215662126' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/19968209215662126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/19968209215662126'/><link rel='alternate' type='text/html' href='http://anton_nazarov.fatal.ru/blog/2008/06/popular-history-of-particle.html' title='Popular history of particle accelerators experiments (part 1)'/><author><name>Anton Nazarov</name><uri>http://www.blogger.com/profile/15605075612768561014</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3909437111992360080.post-7988564502505161104</id><published>2008-03-04T01:26:00.001+03:00</published><updated>2008-03-04T01:37:40.411+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='office'/><category scheme='http://www.blogger.com/atom/ns#' term='b2c'/><title type='text'>First day in our office</title><content type='html'>Our project is getting real. &lt;br /&gt;At Saturday we had the first day in our new office at the outskirts of Saint-Petersburg.&lt;br /&gt;We have big room in the building of former headquarters of an aluminium plant.&lt;br /&gt;&lt;img width="400px" height="300px" src="http://anton_nazarov.fatal.ru/lib/exe/fetch.php?w=400&amp;h=300&amp;cache=cache&amp;media=photoalbum:photoalbum:work:dsc00277.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Our first tasks were to set up LAN and internet connection, assemble office chairs and put up a whiteboard.&lt;br /&gt;&lt;br /&gt;&lt;img width="300px" height="400px" src="http://anton_nazarov.fatal.ru/lib/exe/fetch.php?w=300&amp;h=400&amp;cache=cache&amp;media=photoalbum:photoalbum:work:dsc00279.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;You can see that we successfully fulfilled these tasks!&lt;br /&gt;&lt;img width="400px" height="300px" src="http://anton_nazarov.fatal.ru/lib/exe/fetch.php?w=400&amp;h=300&amp;cache=cache&amp;media=photoalbum:photoalbum:work:dsc00280.jpg" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/3909437111992360080-7988564502505161104?l=anton_nazarov.fatal.ru%2Fblog%2Fblogger.html'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/7988564502505161104/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3909437111992360080&amp;postID=7988564502505161104' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/7988564502505161104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/7988564502505161104'/><link rel='alternate' type='text/html' href='http://anton_nazarov.fatal.ru/blog/2008/03/first-day-in-our-office.html' title='First day in our office'/><author><name>Anton Nazarov</name><uri>http://www.blogger.com/profile/15605075612768561014</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3909437111992360080.post-4364270710365653809</id><published>2008-01-18T22:01:00.000+03:00</published><updated>2008-01-18T22:04:55.353+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='b2c'/><category scheme='http://www.blogger.com/atom/ns#' term='social networks'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><title type='text'>Business-consumer social networks presentation</title><content type='html'>Presentation by&lt;a href="http://yury.name"&gt;Yury Lifshits&lt;/a&gt; on the project of creation of prototype of social network for interaction between businesses abd consumers.&lt;br /&gt;&lt;br /&gt;&lt;div style="width:425px;text-align:left" id="__ss_232597"&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slideshare.net/swf/ssplayer2.swf?doc=businessconsumer-networks-project-proposal-by-yury-lifshits-1200643993359095-4"/&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed src="http://static.slideshare.net/swf/ssplayer2.swf?doc=businessconsumer-networks-project-proposal-by-yury-lifshits-1200643993359095-4" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;&lt;a href="http://www.slideshare.net/?src=embed"&gt;&lt;img src="http://static.slideshare.net/swf/logo_embd.png" style="border:0px none;margin-bottom:-5px" alt="SlideShare"/&gt;&lt;/a&gt; | &lt;a href="http://www.slideshare.net/yurylifshits/businessconsumer-networks-project-proposal-by-yury-lifshits" title="View 'Business-Consumer Networks. Project Proposal by Yury Lifshits' on SlideShare"&gt;View&lt;/a&gt; | &lt;a href="http://www.slideshare.net/upload"&gt;Upload your own&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://yury.name/business.html"&gt;Project page&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/3909437111992360080-4364270710365653809?l=anton_nazarov.fatal.ru%2Fblog%2Fblogger.html'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/4364270710365653809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3909437111992360080&amp;postID=4364270710365653809' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/4364270710365653809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/4364270710365653809'/><link rel='alternate' type='text/html' href='http://anton_nazarov.fatal.ru/blog/2008/01/business-consumer-social-networks.html' title='Business-consumer social networks presentation'/><author><name>Anton Nazarov</name><uri>http://www.blogger.com/profile/15605075612768561014</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3909437111992360080.post-2756758120132719105</id><published>2008-01-07T21:32:00.000+03:00</published><updated>2008-01-07T21:40:26.987+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QFT'/><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>Half a year of absence</title><content type='html'>I haven't written anything here for half a year. &lt;br /&gt;It's a pity, but I had not much of enthusiasm for writing, and all of it I put into writing my master's thesis. So diploma is almost finished, and now I am preparing presentation. &lt;br /&gt;Also I've presented my results at the &lt;a href="http://http://www.phys.spbu.ru/outeducational/conference/"&gt;local conference&lt;/a&gt;. &lt;br /&gt;You can view my thesis and presentations &lt;a href="http://anton_nazarov.fatal.ru/doku.php?id=%D0%BC%D0%BE%D0%B8_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D1%8B"&gt;here&lt;/a&gt; (sorry, in Russian only).&lt;br /&gt;The main result is that we can conclude that QFT on non-commutative spaces is sufficiently non-trivial even in simplest case, studied (with opposite results) by Fiore and Wess. &lt;br /&gt;Also I was able to construct several new non-commutative spaces.&lt;br /&gt;Somehow I raised the entropy, because now we can study not one but several examples of non-commutative spaces, constructed with twisting :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/3909437111992360080-2756758120132719105?l=anton_nazarov.fatal.ru%2Fblog%2Fblogger.html'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/2756758120132719105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3909437111992360080&amp;postID=2756758120132719105' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/2756758120132719105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/2756758120132719105'/><link rel='alternate' type='text/html' href='http://anton_nazarov.fatal.ru/blog/2008/01/half-year-of-absence.html' title='Half a year of absence'/><author><name>Anton Nazarov</name><uri>http://www.blogger.com/profile/15605075612768561014</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3909437111992360080.post-1155199716424964453</id><published>2007-07-31T16:39:00.000+04:00</published><updated>2007-07-31T17:28:08.927+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vkontakte.net.ru'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='eric'/><category scheme='http://www.blogger.com/atom/ns#' term='qt'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='pyqt'/><title type='text'>First bits of PyQt</title><content type='html'>Yesterday I wrote my first &lt;a href="http://www.riverbankcomputing.co.uk/pyqt/index.php"&gt;PyQt&lt;/a&gt; application. It is really simple &lt;a href="http://vkontakte.net.ru/wiki/vkontakte_getter"&gt;program, called "tray"&lt;/a&gt;, which lives in system tray and notifies user of new messages at my favorite social network &lt;a href="http://vkontakte.ru"&gt;Vkontakte.ru&lt;/a&gt; (Russian clone of &lt;a href="http://facebook.com"&gt;FaceBook.com&lt;/a&gt;). &lt;br /&gt;The program is less than 170 lines of code. You can try it if you are registered at vkontakte.ru, but the program doesn't matter now. &lt;br /&gt;I am very pleased with simplicity of creation of portable rich GUI applications with PyQt, but as always there are some issues on Windows. I created the program on my favorite old Linux box with &lt;a href="http://vim.org"&gt;vim&lt;/a&gt;, so there I had no problems with PyQt4 installation and no need of packaging, because the program consists of one file and three icons. &lt;br /&gt;Then I decided to try it on Windows. First of all I installed newest PyQt 4.3.0. This new version is now packed in self-installing archive, which includes Qt and Eric4 IDE, so now you shouldn't have problems which I described in &lt;a href="http://anton_nazarov.fatal.ru/blog/2007/06/eric-ide-on-unfriendly-system.html"&gt;this post&lt;/a&gt;. &lt;br /&gt;After that the program worked perfectly, but I needed to create standalone version for people who don't have Python and PyQt on their PCs.&lt;br /&gt;This is rather simple task, but I've spent several hours fighting some issues. &lt;br /&gt;I used &lt;a href="http://py2exe.org"&gt;py2exe&lt;/a&gt; to create standalone executable. The problem was to include PyQt into it. The idea is simple: I needed to specify that PyQt should be included. So I used solution from py2exe.org. I created file called setup.py with following contents:&lt;br /&gt;&lt;i&gt;&lt;br /&gt;from distutils.core import setup&lt;br /&gt;import py2exe&lt;br /&gt;setup(windows=[{"script":"tray.py"}], options={"py2exe":{"includes":["sip"]}})&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;Then I ran &lt;i&gt;python setup.py install py2exe&lt;/i&gt;.&lt;br /&gt;But I received errors like &lt;i&gt;"module import failed: _qt"&lt;/i&gt;. So I decided to mention inclusion explicitly: &lt;i&gt;python setup.py install py2exe --includes=PyQt4,sip&lt;/i&gt;. It didn't help, but error message changed to &lt;i&gt;"cannot find QApplication"&lt;/i&gt;. Then I tried to reorganize imports in my code:&lt;br /&gt;&lt;i&gt;&lt;br /&gt;import sys&lt;br /&gt;from PyQt4.Qt import *&lt;br /&gt;from PyQt4 import QtCore, QtGui&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;gave correct result, and the executable was created. &lt;br /&gt;I believe that this problem with imports is temporary and will be fixed in near future.&lt;br /&gt;&lt;br /&gt;So then I used &lt;a href="http://www.jrsoftware.org/isinfo.php"&gt;Inno Setup&lt;/a&gt; to create setup package and it was really easy. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;br /&gt;It is really easy to create portable applications with great GUI  with PyQt4.&lt;br /&gt;The only trade off is the size of installed application on Windows: for my 170 lines of code project I've got 5 Mb setup package, which extracts into 17 Mb application.&lt;br /&gt;The reason is simple - lack of common packaging system with dependencies on Windows, so the program needs it's own copy of Python and PyQt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/3909437111992360080-1155199716424964453?l=anton_nazarov.fatal.ru%2Fblog%2Fblogger.html'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/1155199716424964453/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3909437111992360080&amp;postID=1155199716424964453' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/1155199716424964453'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/1155199716424964453'/><link rel='alternate' type='text/html' href='http://anton_nazarov.fatal.ru/blog/2007/07/first-bits-of-pyqt.html' title='First bits of PyQt'/><author><name>Anton Nazarov</name><uri>http://www.blogger.com/profile/15605075612768561014</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3909437111992360080.post-8094434153094145704</id><published>2007-07-13T13:01:00.000+04:00</published><updated>2007-07-31T21:43:58.868+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='KDE'/><category scheme='http://www.blogger.com/atom/ns#' term='old'/><category scheme='http://www.blogger.com/atom/ns#' term='Fluxbox'/><category scheme='http://www.blogger.com/atom/ns#' term='ZX Spectrum'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='memories'/><category scheme='http://www.blogger.com/atom/ns#' term='PCs'/><category scheme='http://www.blogger.com/atom/ns#' term='Kubuntu'/><title type='text'>My PCs</title><content type='html'>Today I will try to retrospect history of my home PCs. It is rather personal, so please leave the page immediately if you are not interested :)&lt;br /&gt;&lt;br /&gt;For those, who haven't left yet.&lt;br /&gt;My father is a software engineer, so there is nothing unusual that we'd got first home computer as soon as was possible. It was in 1990 or 1991, when the Soviet Union still existed, so there were some problems with foreign devices. Our first computer was hand-made &lt;a href="http://en.wikipedia.org/wiki/ZX_Spectrum"&gt;ZX Spectrum&lt;/a&gt; clone, which was assembled from different foreign and Russian chips by my father's friend. It had rather peculiar hand-made keyboard, and used Kometa-212 tape-recorder for data storage:&lt;br /&gt;&lt;a href="http://anton_nazarov.fatal.ru/static/images/blog/pcs/mag-kometa212.jpg"&gt;&lt;img width=400px height=300px src="http://anton_nazarov.fatal.ru/static/images/blog/pcs/mag-kometa212.jpg"&gt;&lt;/a&gt;, &lt;br /&gt;and monochrome TV Kaskad-203 as the display, which looked like this: &lt;img src="http://anton_nazarov.fatal.ru/static/images/blog/pcs/kaskad234_.jpg"&gt;&lt;br /&gt;&lt;br /&gt;I'd just started to play chess in local center for youth creativity and enjoyed playing with this computer very much. I was unable to beat it at that time, since I was only six or seven years old :)&lt;br /&gt;Also I tried to do some programming in built-in Basic, but without much success, since I was unable to save entered program on the tape.&lt;br /&gt;I will try to find and photograph remains of that computer.&lt;br /&gt;&lt;br /&gt;It's a pity that couple of years after our old TV ceased to function, so we bought another TV, which was incompatible with computer output. &lt;br /&gt;&lt;br /&gt;So for couple of years we had no working computer at home. I should mention, that the beginning of 1990s was rather hard time in Russia, so IBM PCs were to expensive for us. They cost more than $1000, and it was very big money. The average wage at that time was about 50-100 USD a month.&lt;br /&gt;&lt;br /&gt;When I was eleven, I started study programming in Palace of Youth Creation. I was taught &lt;a href="http://en.wikipedia.org/wiki/Turbo_Pascal"&gt;Turbo Pascal 7.0&lt;/a&gt;. So I was really happy when we bought a computer as a New Year gift at the end of 1996.  &lt;br /&gt;&lt;br /&gt;It was rather good and expensive machine with &lt;a href="http://en.wikipedia.org/wiki/AMD_K5"&gt;AMD K5&lt;/a&gt; 75 MHz processor, 8 megabytes of RAM, 600 megabytes hard drive and brand new Windows 95 OS and 14" CRT monitor GoldStar 1468. &lt;br /&gt;&lt;img src="http://www.onego.ru/win/pages/hungary/predpr/nsys/monitors/monitor1.jpg"&gt;&lt;br /&gt;I still use this monitor, which has rather decent picture quality and 800x600/75Hz resolution. &lt;br /&gt;&lt;br /&gt;We also bought a printer HP DeskJet 400, which is really cool, I used it last time just two years ago, when I had no time to buy a cartridge for new printer. &lt;img src="http://www.worldclassink.com/fullaccess/PrinterImages/HP-DeskJet-400.jpg"&gt;&lt;br /&gt;&lt;br /&gt;I enjoyed playing &lt;a href="http://en.wikipedia.org/wiki/Warcraft_2"&gt;Warcraft II&lt;/a&gt; and programming in Turbo Pascal. But the OS was a complete disaster, it showed &lt;a href="http://en.wikipedia.org/wiki/Blue_Screen_of_Death"&gt;Blue Screen of Death&lt;/a&gt; several times a day. May be it was due to the lack of system resources, since OS became more stable when we added 8 more megabytes of RAM a year later, or may be because the system was &lt;a href="http://en.wikipedia.org/wiki/Warez"&gt;cracked&lt;/a&gt;, not bought legally. As you remember, couple hundreds of bucks were a lot of money in Russia in that time :)&lt;br /&gt;&lt;br /&gt;In the end of 1997 we added 8 megs of RAM, sound card, CD-ROM and 1.2 Gb hard drive to our PC. Nevertheless, by the end of 1998 it became completely obsolete.&lt;br /&gt;So we "upgraded" it by replacement of main board, processor, RAM, and hard drive. We used the box of old PC, and also bought new LG Flatron 795FT monitor. &lt;br /&gt;&lt;img src="http://forsiben.chat.ru/il/795FT.jpg"&gt;&lt;br /&gt;New computer was pretty cool, it was based on AMD K6-2/350Mhz processor, with 64 megs of RAM (128 more megabytes was added a year later), 6 Gb Seagate Medalist hard drive and great USR Courier 56k modem. Modem was really good on our old phone line. We had almost no breaks, but rather slow (33,6k) connection because of old hardware at local exchange.&lt;br /&gt;&lt;br /&gt;In 1999 computer section in Palace of Youth Creation switched from DOS/Windows 3.11 to FreeBSD, so I started to study C, C++ and Perl, and installed &lt;a href="http://en.wikipedia.org/wiki/Red_Hat_Linux"&gt;RedHat Linux&lt;/a&gt; 5.2 and later 6.0 and 6.2 on our first hard drive, which was 600 megabytes. It's funny that there were enough space for X11, KDE, XEmacs, LaTeX, kernel sources and so on. I also enjoyed &lt;a href="http://en.wikipedia.org/wiki/Fallout_2"&gt;Fallout 2&lt;/a&gt; game.&lt;br /&gt;&lt;br /&gt;In the end of the year 2000 we decided that we need new PC, so we bought completely new &lt;a href="http://en.wikipedia.org/wiki/Athlon_XP"&gt;AMD Athlon XP&lt;/a&gt; 1733+ MHz with 256 megs of RAM and 40 Gigs IBM hard drive. We plugged newer LG monitor into new PC, and old GoldStar to older one. So for the first time we had more than one working computer :)&lt;br /&gt;&lt;br /&gt;Well, later we added new hard drives to new PC, 512 megabytes of RAM, CD-RW/DVD-RW drives, new Canon PIXMA iP4000 printer, Epson scanner and so on, but that is not very interesting. In the beginning of this year 40 Gb IBM hard drive on older PC failed, so that computer became Linux only box. I &lt;a href="http://anton_nazarov.fatal.ru/blog/2007/05/time-to-upgrade-ubuntu-on-my-home-boxes.html"&gt;installed KUbuntu 7.04&lt;/a&gt; on it and I use it now everyday for software development, and it is rather fast :) It can host Apache, MySQL and PHP, also I do C++ and Python development on it. It even can play Youtube movies :) The only thing that I've done for optimization was the replacement of &lt;a href="http://www.kde.org"&gt;KDE&lt;/a&gt; with &lt;a href="http://fluxbox.sourceforge.net/"&gt;Fluxbox&lt;/a&gt;.&lt;br /&gt;&lt;img src="http://anton_nazarov.fatal.ru/static/images/blog/pcs/pc.jpg" width=400px height=300px&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/3909437111992360080-8094434153094145704?l=anton_nazarov.fatal.ru%2Fblog%2Fblogger.html'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/8094434153094145704/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3909437111992360080&amp;postID=8094434153094145704' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/8094434153094145704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/8094434153094145704'/><link rel='alternate' type='text/html' href='http://anton_nazarov.fatal.ru/blog/2007/07/my-pcs.html' title='My PCs'/><author><name>Anton Nazarov</name><uri>http://www.blogger.com/profile/15605075612768561014</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3909437111992360080.post-2961680385618818709</id><published>2007-07-05T11:23:00.000+04:00</published><updated>2007-07-05T11:36:05.720+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='QFT'/><category scheme='http://www.blogger.com/atom/ns#' term='twists'/><category scheme='http://www.blogger.com/atom/ns#' term='math'/><title type='text'>QFT on non-commutative spaces</title><content type='html'>&lt;style&gt;&lt;br /&gt; &lt;br /&gt;/* start css.sty */&lt;br /&gt;.cmr-8{font-size:66%;}&lt;br /&gt;.cmmi-12{font-style: italic;}&lt;br /&gt;.cmmi-8{font-size:66%;font-style: italic;}&lt;br /&gt;p.noindent { text-indent: 0em }&lt;br /&gt;p.nopar { text-indent: 0em; }&lt;br /&gt;p.indent{ text-indent: 1.5em }&lt;br /&gt;@media print {div.crosslinks {visibility:hidden;}}&lt;br /&gt;a img { border-top: 0; border-left: 0; border-right: 0; }&lt;br /&gt;center { margin-top:1em; margin-bottom:1em; }&lt;br /&gt;td center { margin-top:0em; margin-bottom:0em; }&lt;br /&gt;.Canvas { position:relative; }&lt;br /&gt;img.math{vertical-align:middle;}&lt;br /&gt;li p.indent { text-indent: 0em }&lt;br /&gt;.enumerate1 {list-style-type:decimal;}&lt;br /&gt;.enumerate2 {list-style-type:lower-alpha;}&lt;br /&gt;.enumerate3 {list-style-type:lower-roman;}&lt;br /&gt;.enumerate4 {list-style-type:upper-alpha;}&lt;br /&gt;div.newtheorem { margin-bottom: 2em; margin-top: 2em;}&lt;br /&gt;.obeylines-h,.obeylines-v {white-space: nowrap; }&lt;br /&gt;div.obeylines-v p { margin-top:0; margin-bottom:0; }&lt;br /&gt;.overline{ text-decoration:overline; }&lt;br /&gt;.overline img{ border-top: 1px solid black; }&lt;br /&gt;td.displaylines {text-align:center; white-space:nowrap;}&lt;br /&gt;.centerline {text-align:center;}&lt;br /&gt;.rightline {text-align:right;}&lt;br /&gt;div.verbatim {font-family: monospace; white-space: nowrap; }&lt;br /&gt;.fbox {padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }&lt;br /&gt;div.center div.fbox {text-align:center; clear:both; padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }&lt;br /&gt;table.minipage{width:100%;}&lt;br /&gt;div.center, div.center div.center {text-align: center; margin-left:1em; margin-right:1em;}&lt;br /&gt;div.center div {text-align: left;}&lt;br /&gt;div.flushright, div.flushright div.flushright {text-align: right;}&lt;br /&gt;div.flushright div {text-align: left;}&lt;br /&gt;div.flushleft {text-align: left;}&lt;br /&gt;.underline{ text-decoration:underline; }&lt;br /&gt;.underline img{ border-bottom: 1px solid black; margin-bottom:1pt; }&lt;br /&gt;.framebox-c, .framebox-l, .framebox-r { padding-left:3.0pt; padding-right:3.0pt; text-indent:0pt; border:solid black 0.4pt; }&lt;br /&gt;.framebox-c {text-align:center;}&lt;br /&gt;.framebox-l {text-align:left;}&lt;br /&gt;.framebox-r {text-align:right;}&lt;br /&gt;span.thank-mark{ vertical-align: super }&lt;br /&gt;div.tabular, div.center div.tabular {text-align: center; margin-top:0.5em; margin-bottom:0.5em; }&lt;br /&gt;table.tabular td p{margin-top:0em;}&lt;br /&gt;table.tabular {margin-left: auto; margin-right: auto;}&lt;br /&gt;div.td00{ margin-left:0pt; margin-right:0pt; }&lt;br /&gt;div.td01{ margin-left:0pt; margin-right:5pt; }&lt;br /&gt;div.td10{ margin-left:5pt; margin-right:0pt; }&lt;br /&gt;div.td11{ margin-left:5pt; margin-right:5pt; }&lt;br /&gt;td.td00{ padding-left:0pt; padding-right:0pt; }&lt;br /&gt;td.td01{ padding-left:0pt; padding-right:5pt; }&lt;br /&gt;td.td10{ padding-left:5pt; padding-right:0pt; }&lt;br /&gt;td.td11{ padding-left:5pt; padding-right:5pt; }&lt;br /&gt;.hline hr, .cline hr{ height : 1px; }&lt;br /&gt;.tabbing-right {text-align:right;}&lt;br /&gt;span.TEX {letter-spacing: -0.125em; }&lt;br /&gt;span.TEX span.E{ position:relative;top:0.5ex;left:-0.0417em;}&lt;br /&gt;a span.TEX span.E {text-decoration: none; }&lt;br /&gt;span.LATEX span.A{ position:relative; top:-0.5ex; left:-0.4em; font-size:85%;}&lt;br /&gt;span.LATEX span.TEX{ position:relative; left: -0.4em; }&lt;br /&gt;div.float img, div.float .caption {text-align:center;}&lt;br /&gt;div.figure img, div.figure .caption {text-align:center;}&lt;br /&gt;.marginpar {width:20%; float:right; text-align:left; margin-left:auto; margin-top:0.5em; font-size:85%; text-decoration:underline;}&lt;br /&gt;.marginpar p{margin-top:0.4em; margin-bottom:0.4em;}&lt;br /&gt;.equation td{text-align:center; }&lt;br /&gt;td.equation { margin-top:1em; margin-bottom:1em; } &lt;br /&gt;td.eqnarray4 { width:5%; white-space: normal; }&lt;br /&gt;td.eqnarray2 { width:5%; }&lt;br /&gt;table.eqnarray-star, table.eqnarray {width:100%;}&lt;br /&gt;div.eqnarray{text-align:center;}&lt;br /&gt;div.array {text-align:center;}&lt;br /&gt;div.pmatrix {text-align:center;}&lt;br /&gt;span.pmatrix img{vertical-align:middle;}&lt;br /&gt;div.pmatrix {text-align:center;}&lt;br /&gt;img.cdots{vertical-align:middle;}&lt;br /&gt;.partToc a, .partToc, .likepartToc a, .likepartToc {line-height: 200%; font-weight:bold; font-size:110%;}&lt;br /&gt;.caption td.id{font-weight: bold; white-space: nowrap; }&lt;br /&gt;table.caption {text-align:center;}&lt;br /&gt;h1.partHead{text-align: center}&lt;br /&gt;p.bibitem { text-indent: -2em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; }&lt;br /&gt;p.bibitem-p { text-indent: 0em; margin-left: 2em; margin-top:0.6em; margin-bottom:0.6em; }&lt;br /&gt;.paragraphHead, .likeparagraphHead { margin-top:2em; font-weight: bold;}&lt;br /&gt;.subparagraphHead, .likesubparagraphHead { font-weight: bold;}&lt;br /&gt;.quote {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; }&lt;br /&gt;.verse{white-space:nowrap; margin-left:2em}&lt;br /&gt;div.maketitle {text-align:center;}&lt;br /&gt;h2.titleHead{text-align:center;}&lt;br /&gt;div.maketitle{ margin-bottom: 2em; }&lt;br /&gt;div.author, div.date {text-align:center;}&lt;br /&gt;div.thanks{text-align:left; margin-left:10%; font-size:80%; font-style:italic; }&lt;br /&gt;div.author{white-space: nowrap;}&lt;br /&gt;.quotation {margin-bottom:0.25em; margin-top:0.25em; margin-left:1em; }&lt;br /&gt;.abstract p {margin-left:5%; margin-right:5%;}&lt;br /&gt;.equation td{text-align:center; }&lt;br /&gt;table.align, table.alignat, table.xalignat, table.xxalignat, table.flalign, table.align-star, table.alignat-star, table.xalignat-star, table.flalign-star {width:100%; white-space: nowrap;}&lt;br /&gt;td.align-label { width:5%; }&lt;br /&gt;td.align-odd { text-align:right; padding-right:0.3em;}&lt;br /&gt;td.align-even { text-align:left; padding-right:0.6em;}&lt;br /&gt;td.gather-star, td.gather1 {text-align:center; }&lt;br /&gt;/* end css.sty */&lt;br /&gt;&lt;br /&gt;&lt;/style&gt;&lt;br /&gt;&lt;br /&gt;&lt;!--l. 13--&gt;&lt;p class="noindent"&gt;Fiore and Wess in their article &lt;a href="http://arxiv.org/abs/hep-th/0701078v3"&gt;&amp;#8221;On full twisted Poincare&amp;#8217; symmetry andQFT on Moyal-Weyl spaces&amp;#8221;&lt;/a&gt; shows that non-commutative QFT withproperly enforced &amp;#8221;twisted symmetry&amp;#8221; is equivalent to ordinary commutativeQFT. They start from enforcing space non-commutativity in most simleway:   &lt;table width="100%" class="equation"&gt;&lt;tr&gt;&lt;td&gt;&lt;a  id="x1-2r1"&gt;&lt;/a&gt;   &lt;center class="math-display" &gt;&lt;img src="http://anton_nazarov.fatal.ru/static/images/blog/math1/notes0x.png" alt="[x&amp;#x02C6;&amp;#x03BC;, &amp;#x02C6;x&amp;#x03BD;] = i&amp;#x0398; &amp;#x03BC;&amp;#x03BD;" class="math-display" &gt;&lt;/center&gt;&lt;/td&gt;&lt;td width="5%"&gt;(1)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;!--l. 17--&gt;&lt;p class="nopar"&gt;Where &lt;img src="http://anton_nazarov.fatal.ru/static/images/blog/math1/notes1x.png" alt="  &amp;#x03BC;&amp;#x03BD;&amp;#x0398;  "  class="math" &gt; is a constant matrix. So the limit &lt;img src="http://anton_nazarov.fatal.ru/static/images/blog/math1/notes2x.png" alt="  &amp;#x03BC;&amp;#x03BD;&amp;#x0398;   &amp;#x2192;  0  "  class="math" &gt; gives ordinarycommutative space. Then algebra &lt;img src="http://anton_nazarov.fatal.ru/static/images/blog/math1/notes3x.png" alt="&amp;#x02C6;A  "  class="math" &gt; generated by &lt;img src="http://anton_nazarov.fatal.ru/static/images/blog/math1/notes4x.png" alt="&amp;#x02C6;x  "  class="math" &gt; is equivalent to algebra offunctions &lt;img src="http://anton_nazarov.fatal.ru/static/images/blog/math1/notes5x.png" alt="A &amp;#x0398;   "  class="math" &gt; on commutative space with deformed product, called star-product.Such star product is introduced using twist &lt;img src="http://anton_nazarov.fatal.ru/static/images/blog/math1/notes6x.png" alt="F  "  class="math" &gt;:   &lt;table width="100%" class="equation"&gt;&lt;tr&gt;&lt;td&gt;&lt;a  id="x1-3r2"&gt;&lt;/a&gt;   &lt;center class="math-display" &gt;&lt;img src="http://anton_nazarov.fatal.ru/static/images/blog/math1/notes7x.png" alt="a &amp;#x22C6; b := (&amp;#x2131;-(1) &amp;#x22B3; a)(&amp;#x2131;-(2) &amp;#x22B3; b)" class="math-display" &gt;&lt;/center&gt;&lt;/td&gt;&lt;td width="5%"&gt;(2)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;!--l. 22--&gt;&lt;p class="nopar"&gt;Properly chosen &lt;img src="http://anton_nazarov.fatal.ru/static/images/blog/math1/notes8x.png" alt="&amp;#x2131; "  class="math" &gt;gives   &lt;table width="100%" class="equation"&gt;&lt;tr&gt;&lt;td&gt;&lt;a  id="x1-4r3"&gt;&lt;/a&gt;   &lt;center class="math-display" &gt;&lt;img src="http://anton_nazarov.fatal.ru/static/images/blog/math1/notes9x.png" alt="[x&amp;#x03BC;,x &amp;#x03BD;]&amp;#x22C6; = i&amp;#x0398; &amp;#x03BC;&amp;#x03BD;" class="math-display" &gt;&lt;/center&gt;&lt;/td&gt;&lt;td width="5%"&gt;(3)&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;!--l. 26--&gt;&lt;p class="nopar"&gt;as required.&lt;!--l. 29--&gt;&lt;p class="indent"&gt;   There are whole classes of equivalent twists, which lead to the same starproduct, so the theory doesn&amp;#8217;t depend on the choice of particular twist. ThenFiore and Wess show how to construct QFT starting with &lt;img src="http://anton_nazarov.fatal.ru/static/images/blog/math1/notes10x.png" alt="A &amp;#x0398;   "  class="math" &gt;. To obtain properself-consistent theory they have to change Poincare-invariance with invariancewith respect to deformed Poincare group, obtained from deformation of Poincarealgebra with the same twist &lt;img src="http://anton_nazarov.fatal.ru/static/images/blog/math1/notes11x.png" alt="&amp;#x2131; "  class="math" &gt;, as was used to deform algebra of functions&lt;img src="http://anton_nazarov.fatal.ru/static/images/blog/math1/notes12x.png" alt="A  "  class="math" &gt;.&lt;!--l. 32--&gt;&lt;p class="indent"&gt;   After the introduction of Wightman axioms and study of Wightman andGreen&amp;#8217;s functions it turns out, that this functions coincide with their undeformedcounterparts at least perturbatively. So deformed Poincare symmetry works as&amp;#8221;compensation&amp;#8221; of space non-commutativity, and theory gives no newphysics.&lt;!--l. 35--&gt;&lt;p class="indent"&gt;   But there are another possibilities. We can use more complex non-commutativespace, for example, we can start from deformation of Poincare symmetry to&lt;img src="http://anton_nazarov.fatal.ru/static/images/blog/math1/notes13x.png" alt="&amp;#x03BA;  "  class="math" &gt;-Poincare, then introduce a twist on &lt;img src="http://anton_nazarov.fatal.ru/static/images/blog/math1/notes14x.png" alt="&amp;#x03BA;  "  class="math" &gt;-Poincare and build non-commutativespace with twisted &lt;img src="http://anton_nazarov.fatal.ru/static/images/blog/math1/notes15x.png" alt="&amp;#x03BA;  "  class="math" &gt;-Poincare symmetry.&lt;!--l. 37--&gt;&lt;p class="indent"&gt;   I hope to study this case in details in the next several days.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/3909437111992360080-2961680385618818709?l=anton_nazarov.fatal.ru%2Fblog%2Fblogger.html'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/2961680385618818709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3909437111992360080&amp;postID=2961680385618818709' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/2961680385618818709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/2961680385618818709'/><link rel='alternate' type='text/html' href='http://anton_nazarov.fatal.ru/blog/2007/07/qft-on-non-commutative-spaces.html' title='QFT on non-commutative spaces'/><author><name>Anton Nazarov</name><uri>http://www.blogger.com/profile/15605075612768561014</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3909437111992360080.post-2629154633086457269</id><published>2007-06-28T16:59:00.000+04:00</published><updated>2007-06-28T18:03:08.984+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='grabbing'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Creating simple yet powerful anonymous downloader in Python</title><content type='html'>Let's suppose for example that we have a task to download big number of pages from some web server. It may be something all personal pages of server users, list of postal addresses or firms.&lt;br /&gt;Python is a very convenient language for this task because it has Interactive Mode (or REPL - Read-Eval-Print-Loop). So we can start Python and write something like this:&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&gt;&gt;&gt;import urllib,re # some modules which we will need later&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;If target web site has some kind of index page, we should start from getting it and parsing it into items:&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&gt;&gt;&gt;index_page=urllib.urlopen('http://example.com/index').read() # we have read contents of the page&lt;br /&gt;&gt;&gt;&gt;items_to_get=re.findall('some regexp',index_page) # now we have list of all items to download, regexp may be something like '&amp;lt;a href=\'([^']*)\'&amp;gt;'&lt;br /&gt;&gt;&gt;&gt;out=open('index','w')  # let's save all the items for future use&lt;br /&gt;&gt;&gt;&gt;for item in items_to_get: &lt;br /&gt;...    out.write(item+'\n')&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt;out.close()&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;It is really simple!&lt;br /&gt;Now we can get all the pages. Let's suppose, that items are simple pages, something like &lt;i&gt;001.html&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;br /&gt;&gt;&gt;&gt;for item in items_to_get:&lt;br /&gt;...    open(item,'w').write(urllib.urlopen('http://example.com/%s'%item).read())&lt;br /&gt;...&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;This two lines of code will download and save all the pages into files like &lt;i&gt;001.html&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;But there are two big problems. First, we download only one page a time, so it will take a lot of time to get all the pages even in case of broad connection because of delays on sending requests, writing pages to disk and so on. Second and more important: site admin can notice that someone (you) tries to download the whole site and ban your IP.&lt;br /&gt;&lt;br /&gt;So we need to write real piece of code. &lt;br /&gt;I will write it in separate file getter.py:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 1 &lt;/font&gt;&lt;font color="#0000ff"&gt;#Let's import something&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 2 &lt;/font&gt;&lt;font color="#a020f0"&gt;import&lt;/font&gt; os,urllib,urllib2,socket,sys,re,threading,time,random&lt;br /&gt;&lt;font color="#804040"&gt; 3 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 4 &lt;/font&gt;max_thread_num=10 &lt;font color="#0000ff"&gt;# we will download in ten threads!&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 5 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 6 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 7 &lt;/font&gt;&lt;font color="#0000ff"&gt;# Let's create class for a thread of download&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt; 8 &lt;/font&gt;&lt;font color="#804040"&gt;&lt;b&gt;class&lt;/b&gt;&lt;/font&gt; &lt;font color="#008080"&gt;ProxyThread&lt;/font&gt;(threading.Thread):&lt;br /&gt;&lt;font color="#804040"&gt; 9 &lt;/font&gt;        &lt;font color="#804040"&gt;&lt;b&gt;def&lt;/b&gt;&lt;/font&gt; &lt;font color="#008080"&gt;set_params&lt;/font&gt;(self,proxy): &lt;font color="#0000ff"&gt;# proxy address&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;10 &lt;/font&gt;                self.proxy=proxy&lt;br /&gt;&lt;font color="#804040"&gt;11 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;12 &lt;/font&gt;        &lt;font color="#804040"&gt;&lt;b&gt;def&lt;/b&gt;&lt;/font&gt; &lt;font color="#008080"&gt;run&lt;/font&gt;(self): &lt;font color="#0000ff"&gt;# main method of thread&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;13 &lt;/font&gt;                        &lt;font color="#0000ff"&gt;# first we create proxy_handler to handle connection with anonymous http proxy&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;14 &lt;/font&gt;                        proxy_handler = urllib2.ProxyHandler(self.proxy)&lt;br /&gt;&lt;font color="#804040"&gt;15 &lt;/font&gt;                        auth = urllib2.HTTPBasicAuthHandler()&lt;br /&gt;&lt;font color="#804040"&gt;16 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;17 &lt;/font&gt;                        &lt;font color="#0000ff"&gt;# then we build opener, wich works through the proxy&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;18 &lt;/font&gt;                        opener = urllib2.build_opener(proxy_handler, auth, urllib2.HTTPHandler)&lt;br /&gt;&lt;font color="#804040"&gt;19 &lt;/font&gt;                        &lt;font color="#0000ff"&gt;#some fake User-Agent (may be useful for some sites)&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;20 &lt;/font&gt;                        opener.addheaders = [('&lt;font color="#ff00ff"&gt;User-agent&lt;/font&gt;', '&lt;font color="#ff00ff"&gt;Mozilla/5.0&lt;/font&gt;')]&lt;br /&gt;&lt;font color="#804040"&gt;21 &lt;/font&gt;                        &lt;font color="#0000ff"&gt;#Let's now check connection with proxy by getting some data from google&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;22 &lt;/font&gt;                        &lt;font color="#804040"&gt;&lt;b&gt;try&lt;/b&gt;&lt;/font&gt;:&lt;br /&gt;&lt;font color="#804040"&gt;23 &lt;/font&gt;                                urllib2.urlopen('&lt;font color="#ff00ff"&gt;&lt;a href="http://google.com"&gt;http://google.com&lt;/a&gt;&lt;/font&gt;').read(5)&lt;br /&gt;&lt;font color="#804040"&gt;24 &lt;/font&gt;                        &lt;font color="#804040"&gt;&lt;b&gt;except&lt;/b&gt;&lt;/font&gt;:&lt;br /&gt;&lt;font color="#804040"&gt;25 &lt;/font&gt;                                &lt;font color="#0000ff"&gt;# this proxy doesn't work, we will try another. &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;26 &lt;/font&gt;                                &lt;font color="#0000ff"&gt;#We need to increment number of available threads. &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;27 &lt;/font&gt;                                &lt;font color="#0000ff"&gt;#Simply use global variable&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;28 &lt;/font&gt;                                &lt;font color="#804040"&gt;&lt;b&gt;global&lt;/b&gt;&lt;/font&gt; max_thread_num&lt;br /&gt;&lt;font color="#804040"&gt;29 &lt;/font&gt;                                max_thread_num+=1&lt;br /&gt;&lt;font color="#804040"&gt;30 &lt;/font&gt;                                &lt;font color="#804040"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;31 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;32 &lt;/font&gt;                        &lt;font color="#0000ff"&gt;# this proxy is good, so we get items, wich are needed to be downloaded&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;33 &lt;/font&gt;                        items_to_get=open('&lt;font color="#ff00ff"&gt;index&lt;/font&gt;').readlines()&lt;br /&gt;&lt;font color="#804040"&gt;34 &lt;/font&gt;                        &lt;font color="#0000ff"&gt;# we shuffle list so that different threads try to download different items&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;35 &lt;/font&gt;                        random.shuffle(items_to_get)&lt;br /&gt;&lt;font color="#804040"&gt;36 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;37 &lt;/font&gt;                        &lt;font color="#804040"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt; itemstr &lt;font color="#804040"&gt;&lt;b&gt;in&lt;/b&gt;&lt;/font&gt; items_to_get:&lt;br /&gt;&lt;font color="#804040"&gt;38 &lt;/font&gt;                                item=itemstr.rstrip() &lt;font color="#0000ff"&gt;#strip newline symbol&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;39 &lt;/font&gt;                                &lt;font color="#804040"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; os.path.exists(item): &lt;font color="#0000ff"&gt;#Already downloaded ?&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;40 &lt;/font&gt;                                        &lt;font color="#804040"&gt;&lt;b&gt;continue&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;41 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;42 &lt;/font&gt;                                &lt;font color="#0000ff"&gt;#Let's try to download something :)&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;43 &lt;/font&gt;                                &lt;font color="#804040"&gt;&lt;b&gt;try&lt;/b&gt;&lt;/font&gt;:&lt;br /&gt;&lt;font color="#804040"&gt;44 &lt;/font&gt;                                        data=opener.open('&lt;font color="#ff00ff"&gt;&lt;a href="http://example.com/%s"&gt;http://example.com/%s&lt;/a&gt;&lt;/font&gt;'%item).read()&lt;br /&gt;&lt;font color="#804040"&gt;45 &lt;/font&gt;                                        &lt;font color="#0000ff"&gt;#CoDeeN proxies give greetings page on first request, so we need to skip it&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;46 &lt;/font&gt;                                        &lt;font color="#804040"&gt;&lt;b&gt;if&lt;/b&gt;&lt;/font&gt; &lt;font color="#804040"&gt;&lt;b&gt;not&lt;/b&gt;&lt;/font&gt; re.search('&lt;font color="#ff00ff"&gt;CoDeeN&lt;/font&gt;',data):&lt;br /&gt;&lt;font color="#804040"&gt;47 &lt;/font&gt;                                                open(item,'&lt;font color="#ff00ff"&gt;w&lt;/font&gt;').write(data)&lt;br /&gt;&lt;font color="#804040"&gt;48 &lt;/font&gt;                                &lt;font color="#804040"&gt;&lt;b&gt;except&lt;/b&gt;&lt;/font&gt;:&lt;br /&gt;&lt;font color="#804040"&gt;49 &lt;/font&gt;                                        &lt;font color="#0000ff"&gt;#If there was some error during download, &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;50 &lt;/font&gt;                                        &lt;font color="#0000ff"&gt;#we will remove incompletely downloaded item, &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;51 &lt;/font&gt;                                        &lt;font color="#0000ff"&gt;#and skip this proxy, because majority of errors are proxy errors:&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;52 &lt;/font&gt;                                        &lt;font color="#804040"&gt;&lt;b&gt;try&lt;/b&gt;&lt;/font&gt;:&lt;br /&gt;&lt;font color="#804040"&gt;53 &lt;/font&gt;                                                os.remove(item)&lt;br /&gt;&lt;font color="#804040"&gt;54 &lt;/font&gt;                                        &lt;font color="#804040"&gt;&lt;b&gt;except&lt;/b&gt;&lt;/font&gt;:&lt;br /&gt;&lt;font color="#804040"&gt;55 &lt;/font&gt;                                                &lt;font color="#804040"&gt;&lt;b&gt;pass&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;56 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;57 &lt;/font&gt;                                        &lt;font color="#804040"&gt;&lt;b&gt;global&lt;/b&gt;&lt;/font&gt; max_thread_num&lt;br /&gt;&lt;font color="#804040"&gt;58 &lt;/font&gt;                                        max_thread_num+=1&lt;br /&gt;&lt;font color="#804040"&gt;59 &lt;/font&gt;                                        &lt;font color="#804040"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;60 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;61 &lt;/font&gt;                        &lt;font color="#804040"&gt;&lt;b&gt;global&lt;/b&gt;&lt;/font&gt; max_thread_num&lt;br /&gt;&lt;font color="#804040"&gt;62 &lt;/font&gt;                        max_thread_num+=1&lt;br /&gt;&lt;font color="#804040"&gt;63 &lt;/font&gt;                        &lt;font color="#804040"&gt;&lt;b&gt;return&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;64 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;65 &lt;/font&gt;&lt;font color="#0000ff"&gt;# Well, it was quite a long method mostly because of error handling. &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;66 &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;67 &lt;/font&gt;&lt;font color="#0000ff"&gt;#Now small piece of code wich gets list of proxies and starts threads:&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;68 &lt;/font&gt;socket.setdefaulttimeout(120) &lt;font color="#0000ff"&gt;# increase connection timeout because some proxies respond after rather long time&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;69 &lt;/font&gt;&lt;font color="#0000ff"&gt;#We will go trough all 50 pages of free proxy list at &lt;a href="http://www.samair.ru"&gt;http://www.samair.ru&lt;/a&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;70 &lt;/font&gt;&lt;font color="#804040"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt; num &lt;font color="#804040"&gt;&lt;b&gt;in&lt;/b&gt;&lt;/font&gt; range(50):&lt;br /&gt;&lt;font color="#804040"&gt;71 &lt;/font&gt;        &lt;font color="#0000ff"&gt;# We get page of proxies&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;72 &lt;/font&gt;        proxy_page=urllib.urlopen('&lt;font color="#ff00ff"&gt;&lt;a href="http://www.samair.ru/proxy/time-%02d.htm"&gt;http://www.samair.ru/proxy/time-%02d.htm&lt;/a&gt;&lt;/font&gt;'%num).read()&lt;br /&gt;&lt;font color="#804040"&gt;73 &lt;/font&gt;        &lt;font color="#0000ff"&gt;# and search for all proxy addresses on it&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;74 &lt;/font&gt;        proxies=re.findall('&lt;font color="#ff00ff"&gt;&amp;lt;span class=&amp;quot;proxy\d*&amp;quot;&amp;gt;(\d+)&amp;lt;/span&amp;gt;.&amp;lt;span class=&amp;quot;proxy\d*&amp;quot;&amp;gt;(?P&amp;lt;n2&amp;gt;\d+)&amp;lt;/span&amp;gt;.(\d+).(\d+):\s*(\d+)&lt;/font&gt;',proxy_page)&lt;br /&gt;&lt;font color="#804040"&gt;75 &lt;/font&gt;        &lt;font color="#0000ff"&gt;# rather complex regexp :)&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;76 &lt;/font&gt;        &lt;font color="#804040"&gt;&lt;b&gt;for&lt;/b&gt;&lt;/font&gt; proxy &lt;font color="#804040"&gt;&lt;b&gt;in&lt;/b&gt;&lt;/font&gt; proxies: &lt;font color="#0000ff"&gt;# try to start thread for each proxy&lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;77 &lt;/font&gt;                &lt;font color="#804040"&gt;&lt;b&gt;while&lt;/b&gt;&lt;/font&gt; max_thread_num&amp;lt;=0: &lt;font color="#0000ff"&gt;# all 10 thread have started, so we need to wait &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;78 &lt;/font&gt;                        time.sleep(1)&lt;br /&gt;&lt;font color="#804040"&gt;79 &lt;/font&gt;                &lt;font color="#0000ff"&gt;# Then we can start a thread: &lt;/font&gt;&lt;br /&gt;&lt;font color="#804040"&gt;80 &lt;/font&gt;                prox={'&lt;font color="#ff00ff"&gt;http&lt;/font&gt;':'&lt;font color="#ff00ff"&gt;%s.%s.%s.%s:%s&lt;/font&gt;'%proxy}&lt;br /&gt;&lt;font color="#804040"&gt;81 &lt;/font&gt;                pt=ProxyThread()&lt;br /&gt;&lt;font color="#804040"&gt;82 &lt;/font&gt;                pt.set_params(prox)&lt;br /&gt;&lt;font color="#804040"&gt;83 &lt;/font&gt;                max_thread_num-=1&lt;br /&gt;&lt;font color="#804040"&gt;84 &lt;/font&gt;                pt.start()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then we can start the program &lt;i&gt;python getter.py&lt;/i&gt;.&lt;br /&gt;Well, it works!&lt;br /&gt;&lt;br /&gt;Almost :)&lt;br /&gt;I've written no ending condition, so this code will end not when all the items will be downloaded, but when all the proxies will be checked. Anyway you need to decide which items you should download and what to do in case of errors.&lt;br /&gt; &lt;br /&gt;Well, it looks like the next post can be about spam bots or other kinds of malware :)&lt;br /&gt;Nonetheless, I believe that you won't use the code for illegal actions :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/3909437111992360080-2629154633086457269?l=anton_nazarov.fatal.ru%2Fblog%2Fblogger.html'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/2629154633086457269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3909437111992360080&amp;postID=2629154633086457269' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/2629154633086457269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/2629154633086457269'/><link rel='alternate' type='text/html' href='http://anton_nazarov.fatal.ru/blog/2007/06/creating-simple-yet-powerful-anonymous.html' title='Creating simple yet powerful anonymous downloader in Python'/><author><name>Anton Nazarov</name><uri>http://www.blogger.com/profile/15605075612768561014</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3909437111992360080.post-5495934729205978109</id><published>2007-06-22T17:17:00.000+04:00</published><updated>2007-06-22T17:39:10.405+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='projects'/><category scheme='http://www.blogger.com/atom/ns#' term='vkontakte.net.ru'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='qt'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='fit2pda'/><category scheme='http://www.blogger.com/atom/ns#' term='site'/><title type='text'>Fit2PDA moved to Google Code, new project started</title><content type='html'>Today I moved &lt;a href="http://code.google.com/p/fit2pda/"&gt;Fit2PDA&lt;/a&gt; development to Google Code. Thanks to &lt;a href="http://code.google.com/p/geomatsi/"&gt;geomatsi&lt;/a&gt; for proposal!&lt;br /&gt;&lt;br /&gt;All the source code is in &lt;a href="http://code.google.com/p/fit2pda/source"&gt;svn&lt;/a&gt; now. Also I've written some help pages for project and uploaded build for Windows. &lt;br /&gt;Linux build will be ready tomorrow. &lt;br /&gt;&lt;br /&gt;So please feel free to download try and write &lt;a href="http://code.google.com/p/fit2pda/issues/list"&gt;bug reports&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I will be happy to get new ideas and patches too!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;New project &lt;a href="http://vkontakte.net.ru/"&gt;vkontakte.net.ru&lt;/a&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Last two weeks there was very little activity on &lt;a href="http://code.google.com/p/fit2pda/"&gt;Fit2PDA&lt;/a&gt; from my side, because of my new web project &lt;a href="http://vkontakte.net.ru/"&gt;vkontakte.net.ru&lt;/a&gt;. &lt;br /&gt;It is devoted to research on most successful Russian social network &lt;a href="http://vkontakte.ru"&gt;vkontakte.ru&lt;/a&gt;. I created small program in Python to draw maps of connections between people in this network. Web site has &lt;a href="http://vkontakte.net.ru"&gt;wiki&lt;/a&gt; for discussion of new ideas.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;I need to warn you that &lt;a href="http://vkontakte.net.ru/"&gt;vkontakte.net.ru&lt;/a&gt; is and will be in Russian only&lt;/b&gt;. Anyway why one not reading Russian can be interested in research of Russian social network :)&lt;br /&gt;&lt;br /&gt;You can visit &lt;a href="http://vkontakte.net.ru/"&gt;vkontakte.net.ru&lt;/a&gt; for more information if you read Russian.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/3909437111992360080-5495934729205978109?l=anton_nazarov.fatal.ru%2Fblog%2Fblogger.html'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/5495934729205978109/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3909437111992360080&amp;postID=5495934729205978109' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/5495934729205978109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/5495934729205978109'/><link rel='alternate' type='text/html' href='http://anton_nazarov.fatal.ru/blog/2007/06/fit2pda-moved-to-google-code-new.html' title='Fit2PDA moved to Google Code, new project started'/><author><name>Anton Nazarov</name><uri>http://www.blogger.com/profile/15605075612768561014</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3909437111992360080.post-8407837416943143135</id><published>2007-06-04T16:17:00.000+04:00</published><updated>2007-06-04T18:29:35.125+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IDE'/><category scheme='http://www.blogger.com/atom/ns#' term='mingw'/><category scheme='http://www.blogger.com/atom/ns#' term='eric'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='qt'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='pyqt'/><title type='text'>Eric IDE  on Unfriendly System</title><content type='html'>At morning I've read on &lt;a href="http://linux.org.ru"&gt;linux.org.ru&lt;/a&gt; of new version of &lt;a href="http://www.die-offenbachs.de/eric/index.html"&gt;Eric IDE&lt;/a&gt;. After looking at &lt;a href="http://www.die-offenbachs.de/eric/eric4-screenshots.html"&gt;screenshots&lt;/a&gt; I was very interested in this IDE. &lt;br /&gt;&lt;br /&gt;So I decided to install it on my work PC. &lt;br /&gt;Unfortunately it's running Windows XP, and I can't change it. And those OS doesn't have normal package manager.&lt;br /&gt;&lt;br /&gt;To install Eric I needed &lt;a href="http://trolltech.com/developer/downloads/qt/windows"&gt;Qt&lt;/a&gt;, &lt;a href="http://python.org"&gt;Python&lt;/a&gt;, &lt;a href="http://www.riverbankcomputing.co.uk/pyqt/index.php"&gt;PyQt&lt;/a&gt;, &lt;a href="http://www.riverbankcomputing.co.uk/qscintilla/index.php"&gt;QScintilla&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I had opensource Qt (installed with &lt;a href="http://www.mingw.org/"&gt;MinGW&lt;/a&gt;) and &lt;a href="http://activestate.com/products/activepython/"&gt;Active Python&lt;/a&gt; installed on my PC. &lt;br /&gt;So I downloaded PyQt, QScintilla and Eric. &lt;br /&gt;I installed binary package of PyQt and started to build QScintilla with MinGW. The build was successful, but python bindings didn't installed because of some error with &lt;a href="http://www.riverbankcomputing.co.uk/sip/index.php"&gt;SIP&lt;/a&gt;. So I tried to build SIP separately. It wasn't build because of some unknown linking errors with Python libraries.&lt;br /&gt;I searched trough the internet, but was unable to find solution.&lt;br /&gt;So I decided to reinstall everything.&lt;br /&gt;&lt;br /&gt;First of all, I downloaded Python from &lt;a href="http://python.org"&gt;python.org&lt;/a&gt; and installed it (it was what really helped).&lt;br /&gt;Then I reinstalled Qt.&lt;br /&gt;Then I downloaded &lt;a href="http://www.riverbankcomputing.com/Downloads/PyQt4/GPL/PyQt-win-gpl-4.2.zip"&gt;source package&lt;/a&gt; of PyQt, unpacked it and run&lt;br /&gt;&lt;i&gt;&lt;br /&gt;python configure.py &lt;br&gt;&lt;br /&gt;make&lt;br&gt;&lt;br /&gt;make install&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;The build completed with no errors. &lt;br /&gt;Next I downloaded &lt;a href="http://www.riverbankcomputing.com/Downloads/QScintilla2/QScintilla-1.73-gpl-2.1.zip"&gt; QScintilla source&lt;/a&gt; and unpacked it. Then I went to &lt;i&gt;Qt4&lt;/i&gt; subdirectory, and run &lt;br /&gt;&lt;i&gt;&lt;br /&gt;qmake qscintilla.pro&lt;br&gt;&lt;br /&gt;make&lt;br&gt;&lt;br /&gt;make install&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;After that I went to &lt;i&gt;Python&lt;/i&gt; subfolder of QScintilla source, and ran &lt;br /&gt;&lt;i&gt;&lt;br /&gt;python configure.py &lt;br&gt;&lt;br /&gt;make&lt;br&gt;&lt;br /&gt;make install&lt;br /&gt;&lt;/i&gt;&lt;br /&gt;When the build was completed I had all needed to run Eric4.&lt;br /&gt;(Also SIP is included into PyQt, so one don't need to build it separately).&lt;br /&gt;Then I unpacked Eric and run &lt;br /&gt;&lt;i&gt;python install.py&lt;br&gt;eric4.bat&lt;/i&gt;&lt;br /&gt;It started after all!&lt;br /&gt;&lt;img width="500px" height="375px" src="http://anton_nazarov.fatal.ru/lib/exe/fetch.php?cache=cache&amp;media=blog:screenshots:eric.png" /&gt;&lt;br /&gt;Eric is really great, but I've met the problem on second run - it haven't started because of some error in debugger configuration. So I had to turn remote debugging and passive debugging on through &lt;i&gt;eric-configure.bat&lt;/i&gt;. After it the IDE started normally.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/3909437111992360080-8407837416943143135?l=anton_nazarov.fatal.ru%2Fblog%2Fblogger.html'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/8407837416943143135/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3909437111992360080&amp;postID=8407837416943143135' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/8407837416943143135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/8407837416943143135'/><link rel='alternate' type='text/html' href='http://anton_nazarov.fatal.ru/blog/2007/06/eric-ide-on-unfriendly-system.html' title='Eric IDE  on Unfriendly System'/><author><name>Anton Nazarov</name><uri>http://www.blogger.com/profile/15605075612768561014</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3909437111992360080.post-6721940243656387661</id><published>2007-05-26T18:17:00.000+04:00</published><updated>2007-05-27T12:11:47.985+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='home'/><title type='text'>Time to upgrade Ubuntu on my home boxes</title><content type='html'>Today I've decided that the time to upgrade Ubuntu Linux on my home PCs has come. Yesterday I received Ubuntu 7.04 and Kubuntu 7.04 CDs from Canonical. &lt;br /&gt;&lt;br /&gt;I have two PCs at home: old AMD K6-2/350 MHz with 40 Gb dying primary hard disk (Windows 2000 is installed on it :)) and 6 Gb secondary drive, where Ubuntu 5.10 was installed, and newer Athlon XP 1800 with Ubuntu 6.10 on it.&lt;br /&gt;&lt;br /&gt;It's a pity that you can not use live/install Ubuntu cd for upgrades :(&lt;br /&gt;&lt;br /&gt;So I've decided to do dist-upgrade on newer PC and completely reinstall system on older. I've chosen Kubuntu for old box, because it includes Konqueror, which is more lightweight than Firefox. &lt;br /&gt;&lt;br /&gt;Several hours ago I've back-upped all important data from my older pc and started installation of Kubuntu. I've already met several problems:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;I need to write &lt;i&gt;acpi=force&lt;/i&gt; in the boot options of live-cd, because BIOS was released before the year 2000.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Installer was unable to format partition into XFS because of some unknown error (possibly connected with dying primary drive), so I had to create partitions by hand using QParted.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;May be I'd better to write &lt;i&gt;hda=noprobe&lt;/i&gt; boot option to prevent errors from accessing dying primary drive, but I haven't done it&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Now the installation process is 94% complete.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And almost half of required packages have been downloaded on my newer PC through my slow 200 kbit ADSL connection. &lt;br /&gt;So keep on touch with me, I will report the progress and problems!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update 1:&lt;/b&gt;&lt;br /&gt;The installation of Kubuntu is finished, now it is time to test the system and install additional packages. &lt;br /&gt;I plan to install:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;LaTeX&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;maxima&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;developer's tools&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;java&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Mp3 and dvd playback&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;Open SSH&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update 2:&lt;/b&gt;&lt;br /&gt;Installation of mp3 playback was really easy - I tried to play mp3 file and Amarok asked me to install mp3 support, I answered yes and in couple of minutes it started to play.&lt;br /&gt;There were no problems with OpenSSH server too: sudo apt-get install openssh-server&lt;br /&gt;But Adept apt front-end is really slow :(&lt;br /&gt;Well, I installed almost everything I wanted, only couple of packages left.&lt;br /&gt;And download of packages for upgrade on newer PC has not finished yet.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update 3(next day):&lt;/b&gt;&lt;br /&gt;All updates and installations are finished, and now I'm happy with two up-to-date systems.&lt;br /&gt;Rhythmbox on my newer PC now plays last.fm. I'm also happy with &lt;a href="http://anton-nazarov.livejournal.com/12836.html"&gt;kopete LaTeX plugin&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/3909437111992360080-6721940243656387661?l=anton_nazarov.fatal.ru%2Fblog%2Fblogger.html'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/6721940243656387661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3909437111992360080&amp;postID=6721940243656387661' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/6721940243656387661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/6721940243656387661'/><link rel='alternate' type='text/html' href='http://anton_nazarov.fatal.ru/blog/2007/05/time-to-upgrade-ubuntu-on-my-home-boxes.html' title='Time to upgrade Ubuntu on my home boxes'/><author><name>Anton Nazarov</name><uri>http://www.blogger.com/profile/15605075612768561014</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3909437111992360080.post-1159231454690821515</id><published>2007-05-23T11:44:00.000+04:00</published><updated>2007-05-23T12:17:46.461+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='education'/><category scheme='http://www.blogger.com/atom/ns#' term='blog posts'/><category scheme='http://www.blogger.com/atom/ns#' term='articles'/><category scheme='http://www.blogger.com/atom/ns#' term='flame'/><title type='text'>On educational system</title><content type='html'>I've just read &lt;a href="http://www.lambdassociates.org/Blog/decline.htm"&gt; this blog entry&lt;/a&gt; about crisis in British higher education, created by lowering of standards and payments and introduction of modularity and lecturers audits. &lt;br /&gt;&lt;br /&gt;The author of this article works in area of Computer Science, but the tendency seems to be universal both in UK and US. (You can look, for example, through &lt;a href="http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html"&gt;this post&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;So why we in Russia should be interested in problems of far richer countries?&lt;br /&gt;Our educational system is in decline because of enormous and long-lasting lack of money. But modern reformation efforts introduce new dangers. &lt;br /&gt;&lt;br /&gt;Today we are accepting participation in so called "Bologna process", which will inject to our education some problems of British system, mentioned in the first article. The most obvious one is modularity, which allows students to choose courses to learn. It leads to lack of interest in harder core courses, and I can feel it myself. Today I have passed in two of four courses which were given in our department (of QFT), and I have no need to pass the tests on other two, which are far harder.&lt;br /&gt;&lt;br /&gt;Nevertheless, "Bologna process" is a minor threat comparing with government educational policy.&lt;br /&gt;&lt;br /&gt;By the way, our problems will inflict western education too, since it is supported by immigration from our country. &lt;br /&gt;&lt;br /&gt;The only hope is academic emigration from China and other developing countries.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/3909437111992360080-1159231454690821515?l=anton_nazarov.fatal.ru%2Fblog%2Fblogger.html'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/1159231454690821515/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3909437111992360080&amp;postID=1159231454690821515' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/1159231454690821515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/1159231454690821515'/><link rel='alternate' type='text/html' href='http://anton_nazarov.fatal.ru/blog/2007/05/on-educational-system.html' title='On educational system'/><author><name>Anton Nazarov</name><uri>http://www.blogger.com/profile/15605075612768561014</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3909437111992360080.post-679812454807534201</id><published>2007-05-11T11:15:00.000+04:00</published><updated>2007-05-11T11:28:47.982+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='projects'/><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='fit2pda'/><title type='text'>Draft of the article</title><content type='html'>I've written &lt;a href="http://anton_nazarov.fatal.ru/doku.php?id=projects:reading:english"&gt;an article&lt;/a&gt; on reading on PDA. It gives some ideas how to read books, articles from &lt;a href="http://www.arxiv.org"&gt;arxiv&lt;/a&gt; and so on.&lt;br /&gt;This is only first draft, so I will be happy to get your opinions and corrections, especially on my poor English.&lt;br /&gt;&lt;br /&gt;This articles is intended to an advertisement of my project &lt;a href="http://anton_nazarov.fatal.ru/doku.php?id=projects:fit2pda"&gt;Fit2PDA&lt;/a&gt; :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/3909437111992360080-679812454807534201?l=anton_nazarov.fatal.ru%2Fblog%2Fblogger.html'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/679812454807534201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3909437111992360080&amp;postID=679812454807534201' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/679812454807534201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/679812454807534201'/><link rel='alternate' type='text/html' href='http://anton_nazarov.fatal.ru/blog/2007/05/draft-of-article.html' title='Draft of the article'/><author><name>Anton Nazarov</name><uri>http://www.blogger.com/profile/15605075612768561014</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3909437111992360080.post-5875054519978084334</id><published>2007-05-09T21:10:00.000+04:00</published><updated>2007-05-09T21:21:46.462+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='qtsplitter'/><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='projects'/><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='fit2pda'/><title type='text'>Fit2PDA</title><content type='html'>I've finally chosen the name for my &lt;a href="http://anton_nazarov.fatal.ru/doku.php?id=projects:qtsplitter:index"&gt;program&lt;/a&gt;. &lt;br /&gt;So it is now called &lt;b&gt;Fit2PDA&lt;/b&gt;. &lt;br /&gt;&lt;br /&gt;I think that the name is apt to the program :)&lt;br /&gt;&lt;br /&gt;I've done some additional improvements in GUI, so now you can see (rather accurate:) progress bars during conversion and you can convert not only PDF/PostScript, but also &lt;a href="http://djvu.org/"&gt;Djvu&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Big number of free scanned ebooks can be found in &lt;a href="http://lib.homelinux.org"&gt;Kolhoz library&lt;/a&gt; and eDonkey2000 &lt;a href="http://en.wikipedia.org/wiki/P2p"&gt;p2p-network&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;By the way, there are 2 good compatible clients for eDonkey: &lt;a href="http://emule.org"&gt;eMule&lt;/a&gt; for Windows and &lt;a href="http://amule.org"&gt;aMule&lt;/a&gt; for Linux. So, if you use both operation systems, you can continue your emule downloads in amule. You just need to select the same working directory!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/3909437111992360080-5875054519978084334?l=anton_nazarov.fatal.ru%2Fblog%2Fblogger.html'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/5875054519978084334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3909437111992360080&amp;postID=5875054519978084334' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/5875054519978084334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/5875054519978084334'/><link rel='alternate' type='text/html' href='http://anton_nazarov.fatal.ru/blog/2007/05/fit2pda.html' title='Fit2PDA'/><author><name>Anton Nazarov</name><uri>http://www.blogger.com/profile/15605075612768561014</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3909437111992360080.post-408380123407531580</id><published>2007-05-09T20:25:00.000+04:00</published><updated>2007-05-09T21:23:20.802+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fit2pda'/><category scheme='http://www.blogger.com/atom/ns#' term='business'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>The book "Innovator's Dilemma"</title><content type='html'>Couple of days ago I've finished the book &lt;a href="http://www.amazon.com/Innovators-Dilemma-Revolutionary-Business-Essentials/dp/0060521996"&gt;"Innovator's Dilemma"&lt;/a&gt; by Clayton M. Christensen. &lt;br /&gt;I read several times that it is "the best business book ever written" an so on. &lt;br /&gt;Well, I don't know is it true, I haven't read a lot of business books.&lt;br /&gt;The book is really interesting, but the main idea of the book, that there are so called &lt;a href="http://en.wikipedia.org/wiki/Disruptive_technology"&gt;"disruptive technologies"&lt;/a&gt;, which can't be handled by existing businesses seems rather natural. &lt;br /&gt;Why else new businesses would appear after all? &lt;br /&gt;&lt;br /&gt;I was able to download this book for free from Internet shop &lt;a href="http://www.bizbook.ru/index.php?rubrik_id=28006&amp;book_id=20326"&gt;bizbook.ru&lt;/a&gt;, because they give 20 pages preview of the book for free (in very poor quality images).&lt;br /&gt;So I've used number of anonymous proxies and downloaded the whole book. &lt;br /&gt;I had to do it because I was unable to find the book in usual warez sources and p2p networks.&lt;br /&gt;It a pity that I had to do such a thing myself, because it means that we don't have access to all the books worth to read even through pirate's networks.&lt;br /&gt;&lt;br /&gt;By the way, I used my program &lt;a href="http://anton_nazarov.fatal.ru/doku.php?id=projects:qtsplitter:index"&gt;Fit2PDA&lt;/a&gt; to convert this book, and it worked perfectly :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/3909437111992360080-408380123407531580?l=anton_nazarov.fatal.ru%2Fblog%2Fblogger.html'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/408380123407531580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3909437111992360080&amp;postID=408380123407531580' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/408380123407531580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/408380123407531580'/><link rel='alternate' type='text/html' href='http://anton_nazarov.fatal.ru/blog/2007/05/book.html' title='The book &quot;Innovator&apos;s Dilemma&quot;'/><author><name>Anton Nazarov</name><uri>http://www.blogger.com/profile/15605075612768561014</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3909437111992360080.post-495901547324983651</id><published>2007-05-02T21:23:00.000+04:00</published><updated>2007-05-02T21:41:24.791+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='qtsplitter'/><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='projects'/><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><title type='text'>First "public" version of "qtsplitter"</title><content type='html'>Finally first public alpha is out!&lt;br /&gt;First completely working build for Windows is &lt;a href="http://anton_nazarov.fatal.ru/lib/exe/fetch.php?id=projects%3Aqtsplitter%3Aindex&amp;cache=cache&amp;amp;media=projects:qtsplitter:converter3.zip"&gt;here&lt;/a&gt;&lt;br /&gt;Simply download and extract archive, then run &lt;b&gt;converter3.exe&lt;/b&gt; , choose pdf-files to convert, select correct screen width of your PDA and convenient resolution  and press on button with red point. Then take a cup of coffee and wait while your papers or books are converted.&lt;br /&gt;You will get &lt;a href="http://www.isilo.com/"&gt;iSilo&lt;/a&gt;-friendly html files, which could be easily converted to Palm-powered with iSiloX, or viewed with Pocket IE on PocketPC.&lt;br /&gt;So I will be happy with any feedback from you!&lt;br /&gt;&lt;br /&gt;Also I will be happy to get help with UI design and Linux package creation.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And the final question: do you think that "FitToPDA" is a good name?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/3909437111992360080-495901547324983651?l=anton_nazarov.fatal.ru%2Fblog%2Fblogger.html'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/495901547324983651/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3909437111992360080&amp;postID=495901547324983651' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/495901547324983651'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/495901547324983651'/><link rel='alternate' type='text/html' href='http://anton_nazarov.fatal.ru/blog/2007/05/new-version-of-qtsplitter.html' title='First &quot;public&quot; version of &quot;qtsplitter&quot;'/><author><name>Anton Nazarov</name><uri>http://www.blogger.com/profile/15605075612768561014</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3909437111992360080.post-4000946645995404593</id><published>2007-04-17T21:54:00.000+04:00</published><updated>2007-04-18T13:56:29.116+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='qtsplitter'/><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='projects'/><category scheme='http://www.blogger.com/atom/ns#' term='computers'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>New version of "qtsplitter"</title><content type='html'>As you already know, I'm writing &lt;a href="http://anton_nazarov.fatal.ru/doku.php?id=projects:qtsplitter:index"&gt;utility program &lt;/a&gt;for conversion of scanned scientific books to PDA and other devices with small screen size. There is a great need in such a program since there is no &lt;b&gt;reliable&lt;/b&gt; and &lt;b&gt;free&lt;/b&gt; formula recognition product.&lt;br /&gt;&lt;br /&gt;I discovered quite simple solution - we don't need to recognize text, we can just reformat the images of pages to feet to PDA screen.&lt;br /&gt;&lt;br /&gt;So that's all about history and motivation. Now let's talk about new version. In this version I incorporated deskew algorithm which automatically rotates image to make text horizontal. Also I reworked splitting code, and now the program is able to split colorful images (though, it uses only black-and-white data to find lines of text) and it tries to preserve under- and over- lines.&lt;br /&gt;I was thinking a lot about coding style when writing this code, because I didn't have sufficient C/C++ practice last couple of years. So I will be happy to hear your suggestions on that matter.&lt;br /&gt;&lt;br /&gt;Also I want to give sounding name to this program, so I declare some kind of contest for the best name, and I'm waiting for your proposals.&lt;br /&gt;&lt;br /&gt;And one announcement: next version will have a GUI, so I plan to make it public. I  will be happy with any kind of support.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update:&lt;/b&gt;&lt;br /&gt;I forgot to mention &lt;a href="http://anton_nazarov.fatal.ru/doku.php?id=projects:qtsplitter:example"&gt;sexy example&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/3909437111992360080-4000946645995404593?l=anton_nazarov.fatal.ru%2Fblog%2Fblogger.html'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/4000946645995404593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3909437111992360080&amp;postID=4000946645995404593' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/4000946645995404593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/4000946645995404593'/><link rel='alternate' type='text/html' href='http://anton_nazarov.fatal.ru/blog/2007/04/new-version-of-qtsplitter.html' title='New version of &quot;qtsplitter&quot;'/><author><name>Anton Nazarov</name><uri>http://www.blogger.com/profile/15605075612768561014</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3909437111992360080.post-5997873679533743722</id><published>2007-04-12T21:40:00.000+04:00</published><updated>2007-04-12T21:53:06.699+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='C'/><category scheme='http://www.blogger.com/atom/ns#' term='GNU'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><title type='text'>Just finished reading the book</title><content type='html'>Couple of days ago I finished reading the book &lt;b&gt;"Advanced Linux Programming"&lt;/b&gt;.&lt;br /&gt;It is old but excellent book on programming in GNU/Linux environment.  It starts from brief description of everyday developer's tools such as emacs, gcc, gdb, make and then leads to core topics of Linux development. It covers main system calls, IPC, networking, usage of shared libraries and plugins, error handling and so on.&lt;br /&gt;So it is really useful for experienced developers and even for beginners because the text is very clear. There is no information on GUI development and minor libraries, so the book is very useful even  six years after the publication.&lt;br /&gt;It can be downloaded from the &lt;a href="http://www.advancedlinuxprogramming.com/"&gt;official site&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I was doing some marks when reading, so I created some kind of reference card page on some covered in the book. You can find it &lt;a href="http://anton_nazarov.fatal.ru/doku.php?id=projects:alp_tips"&gt;here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/3909437111992360080-5997873679533743722?l=anton_nazarov.fatal.ru%2Fblog%2Fblogger.html'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/5997873679533743722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3909437111992360080&amp;postID=5997873679533743722' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/5997873679533743722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/5997873679533743722'/><link rel='alternate' type='text/html' href='http://anton_nazarov.fatal.ru/blog/2007/04/just-finished-reading-book.html' title='Just finished reading the book'/><author><name>Anton Nazarov</name><uri>http://www.blogger.com/profile/15605075612768561014</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3909437111992360080.post-6976246943013894373</id><published>2007-04-10T20:55:00.000+04:00</published><updated>2007-04-10T21:10:25.276+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='projects'/><category scheme='http://www.blogger.com/atom/ns#' term='vim'/><category scheme='http://www.blogger.com/atom/ns#' term='site'/><title type='text'>About my projects</title><content type='html'>I believe that you have already discovered that my blog is located on my home site.&lt;br /&gt;I use it not only as &lt;a href="http://anton_nazarov.fatal.ru/doku.php?id=photoalbum:index"&gt;photo album&lt;/a&gt;, but I also put here information related to my current free-time projects.&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Now I try to make my &lt;b&gt;qtsplitter&lt;/b&gt; program usable. Now it can be used as command line tool under both Windows and Linux.&lt;br /&gt;This program splits pages of scanned books into lines and split lines into parts so that they fit into PDA display. You can see how it works &lt;a href="http://anton_nazarov.fatal.ru/doku.php?id=projects:qtsplitter:example"&gt;here &lt;/a&gt;.&lt;br /&gt;You can &lt;a href="http://anton_nazarov.fatal.ru/lib/exe/fetch.php?id=%D0%BC%D0%BE%D0%B8_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D1%8B&amp;cache=cache&amp;amp;media=projects:qtsplitter:converter.tar.gz"&gt;try &lt;/a&gt; the program yourself if you are really interested and know how to build Qt projects.&lt;br /&gt;I would really appreciate if somebody could make and upload statically linked version for Windows. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Also I started to collect useful tips on Vim editor &lt;a href="http://anton_nazarov.fatal.ru/doku.php?id=projects:vim_tips"&gt;here&lt;/a&gt;. After all my site is really apt to such kind of projects because it is wiki-based.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/3909437111992360080-6976246943013894373?l=anton_nazarov.fatal.ru%2Fblog%2Fblogger.html'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/6976246943013894373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3909437111992360080&amp;postID=6976246943013894373' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/6976246943013894373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/6976246943013894373'/><link rel='alternate' type='text/html' href='http://anton_nazarov.fatal.ru/blog/2007/04/about-my-projects.html' title='About my projects'/><author><name>Anton Nazarov</name><uri>http://www.blogger.com/profile/15605075612768561014</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3909437111992360080.post-4508560113714598556</id><published>2007-04-09T17:02:00.000+04:00</published><updated>2007-04-09T17:04:02.518+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Alive'/><title type='text'>The Beginning</title><content type='html'>Hello World!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='http://res1.blogblog.com/tracker/3909437111992360080-4508560113714598556?l=anton_nazarov.fatal.ru%2Fblog%2Fblogger.html'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/4508560113714598556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3909437111992360080&amp;postID=4508560113714598556' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/4508560113714598556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3909437111992360080/posts/default/4508560113714598556'/><link rel='alternate' type='text/html' href='http://anton_nazarov.fatal.ru/blog/2007/04/beginning.html' title='The Beginning'/><author><name>Anton Nazarov</name><uri>http://www.blogger.com/profile/15605075612768561014</uri><email>noreply@blogger.com</email></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry></feed>